package pack01;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Scanner;

/**
 * @作者：JustOne
 * @时间：2021/8/13 - 10:07
 */
public class Demo10_用户注册案例 {
    public static void main(String[] args) throws IOException {

        /*
         * 示例：用户注册操作
         * 1,程序启动后要求输入:用户名，密码，昵称，年龄，将该用户信息写入文件user.txt中保存。
         * 2,每条记录占用100字节，其中用户名，密码，昵称为字符串类型，各占32字节。年龄为int值占用4字节。
         * 3,由于字符串的长度是根据实际内容决定的，因此在写文件时应当设计成故意"留白",
         *   不应当根据实际字符串长度写入，否则不利于读取和修改扩展。
         *   当然，此种操作的弊端在于会浪费部分磁盘空间。
         */

        Scanner sc = new Scanner(System.in);

        System.out.println("请输入用户名");
        String username = sc.next();

        System.out.println("请输入密码:");
        String password = sc.next();

        System.out.println("请输入昵称:");
        String nickname = sc.next();

        System.out.println("请输入年龄:");
        int age = sc.nextInt();

        System.out.println(username+","+password+","+nickname+","+age);

        RandomAccessFile raf = new RandomAccessFile("D:/刘景景的测试文件夹/user.txt","rw");

        raf.seek(raf.length());//指针移到最后

        //写用户名
        byte[] data = username.getBytes("UTF-8");
        data = Arrays.copyOf(data,32);//已用32
        raf.write(data);

        //写密码
        data = password.getBytes("UTF-8");
        data = Arrays.copyOf(data,32);//已用64
        raf.write(data);

        //写昵称
        data = nickname.getBytes("UTF-8");
        data = Arrays.copyOf(data,32);//已用96
        raf.write(data);

        //写年龄，int占4个字节
        raf.writeInt(age);//已用100

        System.out.println("注册完毕!");
        raf.close();

        //此时可以打开记事本，可以看到内容，但其中的年龄是乱码，因为我写的是int，你解读为String，
        //文字不是乱码：因为写的是写入方式是UTF-8下的字节，打开也是按UTF-8

    }
}
